# 配置文件 - 增强版

# OpenAI API配置（最高优先级）
# 您可以从环境变量中读取API密钥，也可以直接在此设置
# 推荐从.env文件加载，这样更安全
import os
API_KEY = os.getenv("OPENAI_API_KEY", "your_api_key_here")
API_BASE_URL = os.getenv("OPENAI_API_BASE_URL", "https://api.openai.com/v1")

# 模型选择
DEFAULT_MODEL = "gpt-3.5-turbo"
MAX_TOKENS = 1000
TEMPERATURE = 0.7

# 本地大模型配置（无需API密钥，离线运行）
USE_LOCAL_LLM = os.getenv("USE_LOCAL_LLM", "true").lower() == "true"
LLM_MODEL = os.getenv("LLM_MODEL", "THUDM/chatglm3-6b-int4")
LOCAL_MODEL_MAX_TOKENS = 512

# 免费大模型API配置（可选）
ENABLE_FREE_LLM = True
FREE_LLM_PROVIDER = os.getenv("FREE_LLM_PROVIDER", "qwen")  # 可选: deepseek, zhipu, qwen, doubao, xunfei
FREE_LLM_API_KEY = os.getenv(f"{FREE_LLM_PROVIDER.upper()}_API_KEY", "your_free_llm_api_key_here")

# 智能对话配置
USE_MIXED_MODE = True  # 混合模式：先尝试简单命令解析，失败则回退到LLM
ENABLE_CONVERSATION_CONTEXT = True  # 启用对话上下文管理
CONTEXT_WINDOW_SIZE = 3  # 上下文窗口大小（保留最近的消息数）

# 语音识别配置
LANGUAGE = "zh-CN"  # 语言设置
WAKE_WORD = "电脑"  # 唤醒词
VOICE_RATE = 150    # 语音速度
VOICE_VOLUME = 1.0  # 语音音量

# 本地大模型配置
USE_LOCAL_LLM = True  # 是否使用本地大模型，已启用以避免依赖API密钥
# 推荐的本地模型选择：
# 1. 轻量级模型（适合大多数电脑）
# LLM_MODEL = "facebook/opt-1.3b"
# 2. 中等模型（需要较好的GPU）
# LLM_MODEL = "facebook/opt-6.7b"
# 3. 开源中文模型
# LLM_MODEL = "uer/roberta-base-finetuned-jd-binary-chinese"  # 适合中文任务的轻量级模型
# 4. 推荐使用ChatGLM系列或Qwen系列模型获得更好的中文对话体验
LLM_MODEL = "THUDM/chatglm3-6b-int4"  # 推荐的中文模型

# 智能对话配置
USE_MIXED_MODE = True  # 启用混合模式：先尝试简单命令解析，失败则回退到LLM
ENABLE_CONVERSATION_CONTEXT = True  # 启用对话上下文管理
MAX_CONTEXT_LENGTH = 5  # 最大上下文长度（轮次）
LLM_TIMEOUT = 30  # LLM请求超时时间（秒）

# 语音识别配置
LANGUAGE = "zh-CN"  # 语言设置，默认使用中文
SAMPLE_RATE = 16000  # 采样率，16kHz是语音识别的标准采样率
CHUNK_SIZE = 1024    # 音频缓冲区大小

# 日志配置
LOG_LEVEL = "INFO"  # 日志级别：DEBUG, INFO, WARNING, ERROR, CRITICAL

# 语音合成配置
VOICE_RATE = 150     # 语音速度，范围在50-450之间
VOICE_VOLUME = 1.0   # 语音音量，范围在0.0-1.0之间

# 语音识别增强配置
RECOGNITION_TIMEOUT = 15  # 语音识别超时时间（秒）
MIN_CONFIDENCE = 0.7      # 最小置信度阈值
WAKE_COOLDOWN = 2         # 唤醒冷却时间（秒）
SILENT_THRESHOLD = 2.0    # 静默检测阈值（秒）
MAX_CONSECUTIVE_ATTEMPTS = 3  # 最大连续识别尝试次数

# 唤醒词
WAKE_WORD = "电脑"  # 唤醒词，可以是字符串或字符串列表

# 系统命令配置
MAX_COMMAND_HISTORY = 100

# 错误处理配置
ENABLE_RETRY = True       # 是否启用自动重试
MAX_RETRY_COUNT = 3       # 最大重试次数
RETRY_DELAY = 1.0         # 重试延迟时间（秒）

# 离线识别配置（Vosk）
VOSK_MODEL_PATH = "model"  # Vosk模型路径
ENABLE_OFFLINE_RECOGNITION = True  # 是否启用离线识别

# 音频设备配置
AUDIO_DEVICE_INDEX = None  # 指定音频输入设备索引，None表示使用系统默认

# 缓冲区配置
AUDIO_BUFFER_SIZE = 5     # 音频缓冲区大小（秒）

# 系统配置
AUTO_SAVE_INTERVAL = 60   # 自动保存间隔（秒）

# 免费大模型API配置
ENABLE_FREE_LLM = True  # 是否启用免费大模型API
FREE_LLM_PROVIDER = "deepseek"  # 默认的免费大模型提供商：deepseek, zhipu, glm, qwen, doubao
FREE_LLM_API_KEY = "your_free_llm_api_key_here"  # 免费大模型API密钥

# 免费大模型API列表配置
FREE_LLM_CONFIG = {
    "deepseek": {
        "api_base": "https://api.deepseek.com/v1",
        "default_model": "deepseek-chat",
        "headers": {
            "Content-Type": "application/json",
            "Authorization": "Bearer {api_key}"
        }
    },
    "zhipu": {
        "api_base": "https://open.bigmodel.cn/api/paas/v4",
        "default_model": "glm-4",
        "headers": {
            "Content-Type": "application/json",
            "Authorization": "Bearer {api_key}"
        }
    },
    "glm": {
        "api_base": "https://open.bigmodel.cn/api/paas/v4",
        "default_model": "glm-3-turbo",
        "headers": {
            "Content-Type": "application/json",
            "Authorization": "Bearer {api_key}"
        }
    },
    "qwen": {
        "api_base": "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation",
        "default_model": "qwen-turbo",
        "headers": {
            "Content-Type": "application/json",
            "Authorization": "Bearer {api_key}"
        }
    },
    "doubao": {
        "api_base": "https://api.doubao.com/chat/completions",
        "default_model": "ERNIE-Bot-turbo",
        "headers": {
            "Content-Type": "application/json",
            "Authorization": "Bearer {api_key}"
        }
    }
}

# 复杂命令检测配置
COMPLEX_COMMAND_CONFIG = {
    "min_word_count": 10,  # 最小单词数
    "max_word_count": 1000,  # 最大单词数
    "complex_keywords": [
        "然后", "之后", "接下来", "最后", "首先", "第二步", "第三步",
        "如果", "否则", "当", "在...时", "直到", "同时", "并且", "或者",
        "创建", "分析", "比较", "计算", "生成", "提取", "处理", "转换",
        "自动化", "工作流", "流程", "步骤", "顺序", "循环", "条件"
    ],
    "action_verbs": [
        "打开", "关闭", "创建", "删除", "修改", "更新", "查询", "搜索",
        "发送", "接收", "下载", "上传", "复制", "粘贴", "移动", "重命名",
        "启动", "停止", "暂停", "继续", "执行", "运行", "切换", "选择"
    ]
}

# 提示词模板配置
PROMPT_TEMPLATES = {
    "system_prompt": "你是一个智能助手，专门用于处理和执行语音命令。请根据用户的请求，准确理解意图并生成相应的响应。",
    "complex_command_analysis": "请分析以下命令，判断其意图，并将其分解为可执行的步骤：\n{command}",
    "parameter_extraction": "请从以下命令中提取关键参数，包括：动作、目标、条件、约束等。请以JSON格式输出。\n{command}",
    "intent_recognition": "请识别以下命令的意图类型，并输出具体的意图名称。\n{command}",
    "command_validation": "请验证以下命令是否可以执行，并指出任何可能的问题或缺失的信息。\n{command}",
    "execution_summarization": "请总结以下命令的执行结果，以自然、友好的语言向用户报告。\n{results}"
}